package com.itheima.喝牛奶案例;

public class Demo {
    public static void main(String[] args) {
        //1创建生产者线程并启动
        new Thread(() -> {
            int count = 0;
            //1死循环
            while (true) {
                //2加锁
                synchronized ("奶箱") {
                    //3判断还要不要送
                    if (Box.count == 0) {
                        break;      //完事了，下班
                    } else {        //否则就继续干
                        //判断奶箱有没有奶
                        if (Box.flag) {
                            //3.1有奶旧等待
                            try {
                                "奶箱".wait();
                            } catch (InterruptedException e) {
                                e.printStackTrace();
                            }
                        } else {
                            //3.2没有就生产
                            count++;
                            System.out.println("送奶工人正在送第"+count+"瓶奶");
                            //3,3修改奶箱状态为true
                            Box.flag = true;
                            //3.4唤醒消费者
                            "奶箱".notify();
                        }
                    }
                }
            }
        }).start();

        //2.创建消费者线程并启动
        new Thread(() -> {
            //定义一个临时变量，用来计数
            int count = 0;

            //1.死循环
            while (true) {
                //2.加锁
                synchronized ("奶箱") {
                    //3.判断
                    if (Box.count == 0) {
                        break;
                    } else {
                        //判断当前奶箱是否有奶
                        if (Box.flag) {
                            count++;
                            //有数据就消费
                            System.out.println("少爷正在喝第" + count + "瓶奶");
                            //数量-1
                            Box.count--;
                            //修改奶箱状态为false
                            Box.flag = false;
                            //唤醒生产者线程
                            "奶箱".notify();
                        } else {
                            //没有数据，就等待
                            try {
                                "奶箱".wait();
                            } catch (InterruptedException e) {
                                e.printStackTrace();
                            }
                        }
                    }
                }
            }
        }).start();


    }
}

//临界资源类：奶箱类
class Box {
    //状态：true，表示有奶，false表示没有
    public static boolean flag = false;

    //总理：假设要送30天的奶
    public static int count = 30;
}

//送快递